package beans;

import bc.ArqueoVentanillaDelegate;
import bc.VentanillaDelegate;
import edu.upn.sigemfi.ope.be.ArqueoVentanilla;
import edu.upn.sigemfi.ope.be.Ventanilla;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

public class VentanillaController {

    private VentanillaDelegate delegate;
    private ArqueoVentanillaDelegate delegateArqueoVentanilla;
    private Ventanilla ventanilla;
    private ArqueoVentanilla arqueoVentanilla;
    private String criterio;
    private String hora;
    private String minu;

    public VentanillaController() {
        delegate = new VentanillaDelegate();
        delegateArqueoVentanilla = new ArqueoVentanillaDelegate();
    }

    public String getCriterio() {
        return criterio;
    }

    public void setCriterio(String criterio) {
        this.criterio = criterio;
    }

    public Ventanilla getVentanilla() {
        return ventanilla;
    }

    public void setVentanilla(Ventanilla ventanilla) {
        this.ventanilla = ventanilla;
    }

    public ArqueoVentanilla getArqueoVentanilla() {
        return arqueoVentanilla;
    }

    public void setArqueoVentanilla(ArqueoVentanilla arqueoVentanilla) {
        this.arqueoVentanilla = arqueoVentanilla;
    }

    public String getHora() {
        return hora;
    }

    public void setHora(String hora) {
        this.hora = hora;
    }

    public String getMinu() {
        return minu;
    }

    public void setMinu(String minu) {
        this.minu = minu;
    }

    //Metodo para mostrar mensajes en la pagina
    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

    public String nuevo() {
        ventanilla = new Ventanilla();
        ventanilla.setEstado(true);
        return "nuevo";
    }

    public String apertura() {
        arqueoVentanilla = new ArqueoVentanilla();
        hora = "";
        minu = "";
        return "apertura";
    }

    public String cierre() {
        hora = "";
        minu = "";
        return "cierre";
    }

    public String arqueo() {
        return "arqueo";
    }

    public String edita() {
        return "editar";
    }

    public String cancelar() {
        ventanilla = null;
        return "volver";
    }

    public String aperturar() {
        try {
            if (arqueoVentanilla != null) {
                arqueoVentanilla.setHoraApertura(hora + ":" + minu);
                arqueoVentanilla.setHoraCierre("");
                arqueoVentanilla.setFidOpeVentanilla(ventanilla);
                delegateArqueoVentanilla.crear(arqueoVentanilla);
                mostrarMensaje("Exito", "La Apertura de la Ventanilla se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
                arqueoVentanilla = new ArqueoVentanilla();
            } else {
                mostrarMensaje("Error", "Asegurese de haber creado una apertura", FacesMessage.SEVERITY_ERROR);
                return "";
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "volver";
    }

    public String cerrar() {
        try {
            if (arqueoVentanilla != null) {
                arqueoVentanilla.setHoraCierre(hora + ":" + minu);
                delegateArqueoVentanilla.editar(arqueoVentanilla);
                mostrarMensaje("Exito", "El Cierre de la Ventanilla se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber seleccionado una ventanilla", FacesMessage.SEVERITY_ERROR);
                return "";
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "volver";
    }

    public String arquear() {
        try {
            if (arqueoVentanilla != null) {
                delegateArqueoVentanilla.editar(arqueoVentanilla);
                mostrarMensaje("Exito", "El Arqueo de la Ventanilla se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber seleccionado una boveda", FacesMessage.SEVERITY_ERROR);
                return "";
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "volver";
    }

    public String crear() {
        try {
            if (ventanilla != null) {
                delegate.crear(ventanilla);
                mostrarMensaje("Exito", "El registro de la ventanilla se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber creado una ventanilla", FacesMessage.SEVERITY_ERROR);
                ventanilla = new Ventanilla();
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "volver";
    }

    public String editar() {
        try {
            if (ventanilla != null) {
                delegate.editar(ventanilla);
                mostrarMensaje("Exito", "La plataforma " + ventanilla.getNombre() + " fue actualizada.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber seleccionado una plataforma", FacesMessage.SEVERITY_ERROR);
                ventanilla = new Ventanilla();
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "volver";
    }

    public String eliminar() {
        try {
            if (ventanilla != null) {
                delegate.eliminar(ventanilla);
                mostrarMensaje("Exito", "La eliminacion de la ventanilla se realizo exitosamente.", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("Error", "Asegurese de haber seleccionado una ventanilla", FacesMessage.SEVERITY_ERROR);
                return "";
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return "volver";
    }

    public List<Ventanilla> getVentanillas() {
        try {
            return delegate.getVentanillas();
        } catch (Exception e) {
            mostrarMensaje("Error", "No se pudieron listar las Ventanillas", FacesMessage.SEVERITY_ERROR);
        }
        return null;
    }

    public List<ArqueoVentanilla> getArqueosVentanilla() {
        try {
            return delegateArqueoVentanilla.getArqueosPorIdVentanilla(ventanilla.getIdVentanilla());
        } catch (Exception e) {
            mostrarMensaje("Error", "No se pudieron listar los Arqueos de la Ventanilla", FacesMessage.SEVERITY_ERROR);
        }
        return null;
    }

    public String HabilitarDeshabilitar() {
        try {
            if (!ventanilla.getEstado()) {

                ventanilla.setEstado(true);
                delegate.editar(ventanilla);
                mostrarMensaje("Editado", "Plataforma " + ventanilla.getIdVentanilla() + " ha sido habilitada", FacesMessage.SEVERITY_INFO);
            } else {
                ventanilla.setEstado(false);
                delegate.editar(ventanilla);
                mostrarMensaje("Editado", "Plataformas " + ventanilla.getIdVentanilla() + " ha sido deshabilitada", FacesMessage.SEVERITY_INFO);
            }
        } catch (Exception e) {
            mostrarMensaje("Error", "No se pudo Habilitar la plataforma", FacesMessage.SEVERITY_ERROR);
        }
        return "listar";
    }

    public Ventanilla buscar(Long idVentanilla) {
        try {
            return delegate.buscar(idVentanilla);
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
        }
        return null;
    }

    public SelectItem[] getVentanillaSI() {
        SelectItem[] select = null;
        try {
            List<Ventanilla> lista = getVentanillas();
            if (lista != null) {
                select = new SelectItem[lista.size() + 1];
                int i = 0;
                select[i++] = new SelectItem(null, "Seleccione una Ventanilla");
                for (Ventanilla go : lista) {
                    select[i++] = new SelectItem(go, go.getNombre());
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No se encontraron Ventanillas");
            }
        } catch (Exception e) {
            mostrarMensaje(e.getMessage(), e.getMessage(), FacesMessage.SEVERITY_ERROR);
            select = new SelectItem[1];
            select[0] = new SelectItem(null, "Error al consultar los datos");
        }
        return select;
    }

    public Ventanilla buscar_Ventanilla(Long id) throws Exception {
        return buscar(id);
    }
}
